home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
mac
/
files
/
ant_nec
/
nec81tar.z
/
nec81tar
/
intrp.f
< prev
next >
Wrap
Text File
|
1991-05-13
|
12KB
|
443 lines
C $TITLE: 'INTRP'
C $NOFLOATCALLS
C
SUBROUTINE INTRP (X,Y,F1,F2,F3,F4)
C
C INTRP USES BIVARIATE CUBIC INTERPOLATION TO OBTAIN THE VALUES OF
C 4 FUNCTIONS AT THE POINT (X,Y).
C
REAL*8 X,Y,DX,DY,XS,YS,XZ,YZ,XX,YY
COMPLEX*16 F1,F2,F3,F4
COMPLEX*16 A,B,C,D,FX1,FX2,FX3,FX4,P1,P2,P3,P4,
1A11,A12,A13,A14,A21,A22,A23,A24,A31,A32,A33,A34,A41,A42,A43,A44,
2B11,B12,B13,B14,B21,B22,B23,B24,B31,B32,B33,B34,B41,B42,B43,B44,
3C11,C12,C13,C14,C21,C22,C23,C24,C31,C32,C33,C34,C41,C42,C43,C44,
4D11,D12,D13,D14,D21,D22,D23,D24,D31,D32,D33,D34,D41,D42,D43,D44
C**
REAL*4 DXA,DYA,XSA,YSA
COMPLEX*8 AR1,AR2,AR3,EPSCF,ARL1,ARL2,ARL3
C**
COMMON/GGRID/AR1(11,10,4),AR2(17,5,4),AR3(9,8,4),EPSCF,DXA(3),
1 DYA(3),XSA(3),YSA(3),NXA(3),NYA(3)
DIMENSION NDA(3), NDPA(3)
DIMENSION A(4,4),B(4,4),C(4,4),D(4,4),ARL1(1),ARL2(1),ARL3(1)
EQUIVALENCE(A(1,1),A11),(A(1,2),A12),(A(1,3),A13),(A(1,4),A14)
EQUIVALENCE(A(2,1),A21),(A(2,2),A22),(A(2,3),A23),(A(2,4),A24)
EQUIVALENCE(A(3,1),A31),(A(3,2),A32),(A(3,3),A33),(A(3,4),A34)
EQUIVALENCE(A(4,1),A41),(A(4,2),A42),(A(4,3),A43),(A(4,4),A44)
EQUIVALENCE(B(1,1),B11),(B(1,2),B12),(B(1,3),B13),(B(1,4),B14)
EQUIVALENCE(B(2,1),B21),(B(2,2),B22),(B(2,3),B23),(B(2,4),B24)
EQUIVALENCE(B(3,1),B31),(B(3,2),B32),(B(3,3),B33),(B(3,4),B34)
EQUIVALENCE(B(4,1),B41),(B(4,2),B42),(B(4,3),B43),(B(4,4),B44)
EQUIVALENCE(C(1,1),C11),(C(1,2),C12),(C(1,3),C13),(C(1,4),C14)
EQUIVALENCE(C(2,1),C21),(C(2,2),C22),(C(2,3),C23),(C(2,4),C24)
EQUIVALENCE(C(3,1),C31),(C(3,2),C32),(C(3,3),C33),(C(3,4),C34)
EQUIVALENCE(C(4,1),C41),(C(4,2),C42),(C(4,3),C43),(C(4,4),C44)
EQUIVALENCE(D(1,1),D11),(D(1,2),D12),(D(1,3),D13),(D(1,4),D14)
EQUIVALENCE(D(2,1),D21),(D(2,2),D22),(D(2,3),D23),(D(2,4),D24)
EQUIVALENCE(D(3,1),D31),(D(3,2),D32),(D(3,3),D33),(D(3,4),D34)
EQUIVALENCE(D(4,1),D41),(D(4,2),D42),(D(4,3),D43),(D(4,4),D44)
EQUIVALENCE(ARL1,AR1),(ARL2,AR2),(ARL3,AR3),(XS2,XSA(2)),
1 (YS3,YSA(3))
DATA IXS,IYS,IGRS/-10,-10,-10/,DX,DY,XS,YS/1.,1.,0.,0./
DATA NDA/11,17,9/,NDPA/110,85,72/,IXEG,IYEG/0,0/
IF (X.LT.XS.OR.Y.LT.YS) GO TO 1
IX=INT((X-XS)/DX)+1
IY=INT((Y-YS)/DY)+1
C
C IF POINT LIES IN SAME 4 BY 4 POINT REGION AS PREVIOUS POINT, OLD
C VALUES ARE REUSED
C
IF (IX.LT.IXEG.OR.IY.LT.IYEG) GO TO 1
IF (IABS(IX-IXS).LT.2.AND.IABS(IY-IYS).LT.2) GO TO 12
C
C DETERMINE CORRECT GRID AND GRID REGION
C
1 IF (X.GT.XS2) GO TO 2
IGR=1
GO TO 3
2 IGR=2
IF (Y.GT.YS3) IGR=3
3 IF (IGR.EQ.IGRS) GO TO 4
IGRS=IGR
DX=DXA(IGRS)
DY=DYA(IGRS)
XS=XSA(IGRS)
YS=YSA(IGRS)
NXM2=NXA(IGRS)-2
NYM2=NYA(IGRS)-2
NXMS=((NXM2+1)/3)*3+1
NYMS=((NYM2+1)/3)*3+1
ND=NDA(IGRS)
NDP=NDPA(IGRS)
IX=INT((X-XS)/DX)+1
IY=INT((Y-YS)/DY)+1
4 IXS=((IX-1)/3)*3+2
IF (IXS.LT.2) IXS=2
IXEG=-10000
IF (IXS.LE.NXM2) GO TO 5
IXS=NXM2
IXEG=NXMS
5 IYS=((IY-1)/3)*3+2
IF (IYS.LT.2) IYS=2
IYEG=-10000
IF (IYS.LE.NYM2) GO TO 6
IYS=NYM2
IYEG=NYMS
C
C COMPUTE COEFFICIENTS OF 4 CUBIC POLYNOMIALS IN X FOR THE 4 GRID
C VALUES OF Y FOR EACH OF THE 4 FUNCTIONS
C
6 IADZ=IXS+(IYS-3)*ND-NDP
DO 11 K=1,4
IADZ=IADZ+NDP
IADD=IADZ
DO 11 I=1,4
IADD=IADD+ND
GO TO (7,8,9), IGRS
C P1=AR1(IXS-1,IYS-2+I,K)
7 P1=ARL1(IADD-1)
P2=ARL1(IADD)
P3=ARL1(IADD+1)
P4=ARL1(IADD+2)
GO TO 10
8 P1=ARL2(IADD-1)
P2=ARL2(IADD)
P3=ARL2(IADD+1)
P4=ARL2(IADD+2)
GO TO 10
9 P1=ARL3(IADD-1)
P2=ARL3(IADD)
P3=ARL3(IADD+1)
P4=ARL3(IADD+2)
10 A(I,K)=(P4-P1+3.*(P2-P3))*.1666666667D0
B(I,K)=(P1-2.*P2+P3)*.5
C(I,K)=P3-(2.*P1+3.*P2+P4)*.1666666667D0
11 D(I,K)=P2
XZ=(IXS-1)*DX+XS
YZ=(IYS-1)*DY+YS
C
C EVALUATE POLYMOMIALS IN X AND THEN USE CUBIC INTERPOLATION IN Y
C FOR EACH OF THE 4 FUNCTIONS.
C
12 XX=(X-XZ)/DX
YY=(Y-YZ)/DY
FX1=((A11*XX+B11)*XX+C11)*XX+D11
FX2=((A21*XX+B21)*XX+C21)*XX+D21
FX3=((A31*XX+B31)*XX+C31)*XX+D31
FX4=((A41*XX+B41)*XX+C41)*XX+D41
P1=FX4-FX1+3.*(FX2-FX3)
P2=3.*(FX1-2.*FX2+FX3)
P3=6.*FX3-2.*FX1-3.*FX2-FX4
F1=((P1*YY+P2)*YY+P3)*YY*.1666666667D0+FX2
FX1=((A12*XX+B12)*XX+C12)*XX+D12
FX2=((A22*XX+B22)*XX+C22)*XX+D22
FX3=((A32*XX+B32)*XX+C32)*XX+D32
FX4=((A42*XX+B42)*XX+C42)*XX+D42
P1=FX4-FX1+3.*(FX2-FX3)
P2=3.*(FX1-2.*FX2+FX3)
P3=6.*FX3-2.*FX1-3.*FX2-FX4
F2=((P1*YY+P2)*YY+P3)*YY*.1666666667D0+FX2
FX1=((A13*XX+B13)*XX+C13)*XX+D13
FX2=((A23*XX+B23)*XX+C23)*XX+D23
FX3=((A33*XX+B33)*XX+C33)*XX+D33
FX4=((A43*XX+B43)*XX+C43)*XX+D43
P1=FX4-FX1+3.*(FX2-FX3)
P2=3.*(FX1-2.*FX2+FX3)
P3=6.*FX3-2.*FX1-3.*FX2-FX4
F3=((P1*YY+P2)*YY+P3)*YY*.1666666667D0+FX2
FX1=((A14*XX+B14)*XX+C14)*XX+D14
FX2=((A24*XX+B24)*XX+C24)*XX+D24
FX3=((A34*XX+B34)*XX+C34)*XX+D34
FX4=((A44*XX+B44)*XX+C44)*XX+D44
P1=FX4-FX1+3.*(FX2-FX3)
P2=3.*(FX1-2.*FX2+FX3)
P3=6.*FX3-2.*FX1-3.*FX2-FX4
F4=((P1*YY+P2)*YY+P3)*YY*.1666666667D0+FX2
RETURN
END
C
C
C
SUBROUTINE HSFLD (XI,YI,ZI,AI)
C HSFLD COMPUTES THE H FIELD FOR CONSTANT, SINE, AND COSINE
C CURRENT ON A SEGMENT INCLUDING GROUND EFFECTS.
REAL*8 XI,YI,ZI,RHOSPC
COMPLEX*16 EXK,EYK,EZK,EXS,EYS,EZS,EXC,EYC,EZC,ZRATI,ZRATI2,
1 T1,FRATI,RRV,RRH,ZRATX,QX,QY,QZ,HPK,HPS,HPC
INTEGER*4 IND1,IND2
COMMON/DATAJ/S,B,XJ,YJ,ZJ,CABJ,SABJ,SALPJ,EXK,EYK,EZK,EXS,EYS,
1 EZS,EXC,EYC,EZC,RKH,IND1,IND2,IPGND,IEXK
COMMON/GND/ZRATI,ZRATI2,FRATI,CL,CH,SCRWL,SCRWR,NRADL,KSYMP,
1 IFAR,IPERF,T1,T2
DATA ETA/376.73/
XIJ=XI-XJ
YIJ=YI-YJ
RFL=-1.
DO 7 IP=1,KSYMP
RFL=-RFL
SALPR=SALPJ*RFL
ZIJ=ZI-RFL*ZJ
ZP=XIJ*CABJ+YIJ*SABJ+ZIJ*SALPR
RHOX=XIJ-CABJ*ZP
RHOY=YIJ-SABJ*ZP
RHOZ=ZIJ-SALPR*ZP
C RH=DSQRT(RHOX*RHOX+RHOY*RHOY+RHOZ*RHOZ+AI*AI)
RH=SQRT(RHOX*RHOX+RHOY*RHOY+RHOZ*RHOZ+AI*AI)
IF (RH.GT.1.E-10) GO TO 1
EXK=0.
EYK=0.
EZK=0.
EXS=0.
EYS=0.
EZS=0.
EXC=0.
EYC=0.
EZC=0.
GO TO 7
1 RHOX=RHOX/RH
RHOY=RHOY/RH
RHOZ=RHOZ/RH
PHX=SABJ*RHOZ-SALPR*RHOY
PHY=SALPR*RHOX-CABJ*RHOZ
PHZ=CABJ*RHOY-SABJ*RHOX
CALL HSFLX (S,RH,ZP,HPK,HPS,HPC)
IF (IP.NE.2) GO TO 6
IF (IPERF.EQ.1) GO TO 5
ZRATX=ZRATI
C RMAG=DSQRT(ZP*ZP+RH*RH)
RMAG=SQRT(ZP*ZP+RH*RH)
C XYMAG=DSQRT(XIJ*XIJ+YIJ*YIJ)
XYMAG=SQRT(XIJ*XIJ+YIJ*YIJ)
C
C SET PARAMETERS FOR RADIAL WIRE GROUND SCREEN.
C
IF (NRADL.EQ.0) GO TO 2
XSPEC=(XI*ZJ+ZI*XJ)/(ZI+ZJ)
YSPEC=(YI*ZJ+ZI*YJ)/(ZI+ZJ)
C RHOSPC=DSQRT(XSPEC*XSPEC+YSPEC*YSPEC+T2*T2)
RHOSPC=SQRT(XSPEC*XSPEC+YSPEC*YSPEC+T2*T2)
IF (RHOSPC.GT.SCRWL) GO TO 2
RRV=T1*RHOSPC*DLOG(RHOSPC/T2)
ZRATX=(RRV*ZRATI)/(ETA*ZRATI+RRV)
2 IF (XYMAG.GT.1.E-6) GO TO 3
C
C CALCULATION OF REFLECTION COEFFICIENTS WHEN GROUND IS SPECIFIED.
C
PX=0.
PY=0.
CTH=1.
RRV=(1.,0.)
GO TO 4
3 PX=-YIJ/XYMAG
PY=XIJ/XYMAG
CTH=ZIJ/RMAG
RRV=CDSQRT(1.-ZRATX*ZRATX*(1.-CTH*CTH))
4 RRH=ZRATX*CTH
RRH=-(RRH-RRV)/(RRH+RRV)
RRV=ZRATX*RRV
RRV=(CTH-RRV)/(CTH+RRV)
QY=(PHX*PX+PHY*PY)*(RRV-RRH)
QX=QY*PX+PHX*RRH
QY=QY*PY+PHY*RRH
QZ=PHZ*RRH
EXK=EXK-HPK*QX
EYK=EYK-HPK*QY
EZK=EZK-HPK*QZ
EXS=EXS-HPS*QX
EYS=EYS-HPS*QY
EZS=EZS-HPS*QZ
EXC=EXC-HPC*QX
EYC=EYC-HPC*QY
EZC=EZC-HPC*QZ
GO TO 7
5 EXK=EXK-HPK*PHX
EYK=EYK-HPK*PHY
EZK=EZK-HPK*PHZ
EXS=EXS-HPS*PHX
EYS=EYS-HPS*PHY
EZS=EZS-HPS*PHZ
EXC=EXC-HPC*PHX
EYC=EYC-HPC*PHY
EZC=EZC-HPC*PHZ
GO TO 7
6 EXK=HPK*PHX
EYK=HPK*PHY
EZK=HPK*PHZ
EXS=HPS*PHX
EYS=HPS*PHY
EZS=HPS*PHZ
EXC=HPC*PHX
EYC=HPC*PHY
EZC=HPC*PHZ
7 CONTINUE
RETURN
END
C
C
C
SUBROUTINE HSFLX (S,RH,ZPX,HPK,HPS,HPC)
C CALCULATES H FIELD OF SINE COSINE, AND CONSTANT CURRENT OF SEGMENT
REAL*8 TP,FJKX,PI8,SDK,CDK,HKR,HKI,ZP,DH,Z1,Z2,RHZ,RH2
COMPLEX*16 FJK,HPK,HPS,HPC,EKR1,EKR2,T1,T2,CONS
COMPLEX FJ
DIMENSION FJX(2), FJKX(2)
EQUIVALENCE (FJ,FJX), (FJK,FJKX)
DATA TP/6.283185308D0/,FJX/0.,1./,FJKX/0.,-6.283185308D0/
DATA PI8/25.13274123D0/
IF (RH.LT.1.E-10) GO TO 6
IF (ZPX.LT.0.) GO TO 1
ZP=ZPX
HSS=1.
GO TO 2
1 ZP=-ZPX
HSS=-1.
2 DH=.5*S
Z1=ZP+DH
Z2=ZP-DH
IF (Z2.LT.1.E-7) GO TO 3
RHZ=RH/Z2
GO TO 4
3 RHZ=1.
4 DK=TP*DH
C CDK=DCOS(DK)
CDK=COS(DK)
C SDK=DSIN(DK)
SDK=SIN(DK)
CALL HFK (-DK,DK,RH*TP,ZP*TP,HKR,HKI)
HPK=DCMPLX(HKR,HKI)
IF (RHZ.LT.1.E-3) GO TO 5
RH2=RH*RH
R1=DSQRT(RH2+Z1*Z1)
R2=DSQRT(RH2+Z2*Z2)
EKR1=CDEXP(FJK*R1)
EKR2=CDEXP(FJK*R2)
T1=Z1*EKR1/R1
T2=Z2*EKR2/R2
HPS=(CDK*(EKR2-EKR1)-FJ*SDK*(T2+T1))*HSS
HPC=-SDK*(EKR2+EKR1)-FJ*CDK*(T2-T1)
CONS=-FJ/(2.*TP*RH)
HPS=CONS*HPS
HPC=CONS*HPC
RETURN
5 EKR1=DCMPLX(CDK,SDK)/(Z2*Z2)
EKR2=DCMPLX(CDK,-SDK)/(Z1*Z1)
T1=TP*(1./Z1-1./Z2)
T2=CDEXP(FJK*ZP)*RH/PI8
HPS=T2*(T1+(EKR1+EKR2)*SDK)*HSS
HPC=T2*(-FJ*T1+(EKR1-EKR2)*CDK)
RETURN
6 HPS=(0.,0.)
HPC=(0.,0.)
HPK=(0.,0.)
RETURN
END
C
C
C
SUBROUTINE HFK (EL1,EL2,RHK,ZPKX,SGR,SGI)
C HFK COMPUTES THE H FIELD OF A UNIFORM CURRENT FILAMENT BY
C NUMERICAL INTEGRATION
COMMON/TMH/ ZPK,RHKS
INTEGER*4 NM,NS
REAL*8 T01R,T10R,TE1R,T01I,T10I,TE1I,T11R,T20R,TE2R,T11I,
1 T20I,TE2I,T00R,T00I,RHK,ZPKX,SGR,SGI
DATA NX,NM,NTS,RX/1,65536,4,1.E-4/
ZPK=ZPKX
RHKS=RHK*RHK
Z=EL1
ZE=EL2
S=ZE-Z
EP=S/(10.*NM)
ZEND=ZE-EP
SGR=0.0
SGI=0.0
NS=NX
NT=0
CALL GH (Z,G1R,G1I)
1 DZ=S/NS
ZP=Z+DZ
IF (ZP-ZE) 3,3,2
2 DZ=ZE-Z
IF (ABS(DZ)-EP) 17,17,3
3 DZOT=DZ*.5
ZP=Z+DZOT
CALL GH (ZP,G3R,G3I)
ZP=Z+DZ
CALL GH (ZP,G5R,G5I)
4 T00R=(G1R+G5R)*DZOT
T00I=(G1I+G5I)*DZOT
T01R=(T00R+DZ*G3R)*0.5
T01I=(T00I+DZ*G3I)*0.5
T10R=(4.0*T01R-T00R)/3.0
T10I=(4.0*T01I-T00I)/3.0
CALL TEST (T01R,T10R,TE1R,T01I,T10I,TE1I,0.D0)
IF (TE1I-RX) 5,5,6
5 IF (TE1R-RX) 8,8,6
6 ZP=Z+DZ*0.25
CALL GH (ZP,G2R,G2I)
ZP=Z+DZ*0.75
CALL GH (ZP,G4R,G4I)
T02R=(T01R+DZOT*(G2R+G4R))*0.5
T02I=(T01I+DZOT*(G2I+G4I))*0.5
T11R=(4.0*T02R-T01R)/3.0
T11I=(4.0*T02I-T01I)/3.0
T20R=(16.0*T11R-T10R)/15.0
T20I=(16.0*T11I-T10I)/15.0
CALL TEST (T11R,T20R,TE2R,T11I,T20I,TE2I,0.D0)
IF (TE2I-RX) 7,7,14
7 IF (TE2R-RX) 9,9,14
8 SGR=SGR+T10R
SGI=SGI+T10I
NT=NT+2
GO TO 10
9 SGR=SGR+T20R
SGI=SGI+T20I
NT=NT+1
10 Z=Z+DZ
IF (Z-ZEND) 11,17,17
11 G1R=G5R
G1I=G5I
IF (NT-NTS) 1,12,12
12 IF (NS-NX) 1,1,13
13 NS=NS/2
NT=1
GO TO 1
14 NT=0
IF (NS-NM) 16,15,15
15 WRITE(*,18) Z
GO TO 9
16 NS=NS*2
DZ=S/NS
DZOT=DZ*0.5
G5R=G3R
G5I=G3I
G3R=G2R
G3I=G2I
GO TO 4
17 CONTINUE
SGR=SGR*RHK*.5
SGI=SGI*RHK*.5
RETURN
C
18 FORMAT (24H STEP SIZE LIMITED AT Z=,F10.5)
END
C
C
C
SUBROUTINE GH (ZK,HR,HI)
C INTEGRAND FOR H FIELD OF A WIRE
REAL*8 CKR,SKR,RS,R,RR2,RR3
COMMON/TMH/ ZPK,RHKS
RS=ZK-ZPK
RS=RHKS+RS*RS
R=DSQRT(RS)
CKR=DCOS(R)
SKR=DSIN(R)
RR2=1./RS
RR3=RR2/R
HR=SKR*RR2+CKR*RR3
HI=CKR*RR2-SKR*RR3
RETURN
END